home *** CD-ROM | disk | FTP | other *** search
/ 25 Great Action Games 2 / Disk Image of sr0 (2022-06-01 1821).img / setupapi.inc < prev   
Text File  |  1994-08-16  |  56KB  |  1,829 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34.  
  35.  
  36.  
  37.  
  38. '**************************************************************************
  39. '****************************** Setup Constants ***************************
  40. '**************************************************************************
  41.  
  42.  
  43. ''Command Option Flags
  44.  
  45. CONST cmoVital       = 1
  46. CONST cmoCopy        = 2
  47. CONST cmoUndo        = 4
  48. CONST cmoRoot        = 8
  49. CONST cmoDecompress  = 16
  50. CONST cmoTimeStamp   = 32
  51. CONST cmoReadOnly    = 64
  52. CONST cmoBackup      = 128
  53. CONST cmoForce       = 256
  54. CONST cmoRemove      = 512
  55. CONST cmoOverwrite   = 1024
  56. CONST cmoAppend      = 2048
  57. CONST cmoPrepend     = 4096
  58. CONST cmoNone        = 0
  59. CONST cmoAll         = 65535
  60.  
  61.  
  62. ''File Exist Modes
  63.  
  64. CONST femExists     = 0
  65. CONST femRead       = 1
  66. CONST femWrite      = 2
  67. CONST femReadWrite  = 3
  68.  
  69.  
  70. ''Read-Only Return Code
  71.  
  72. CONST ynrcNo         = 0
  73. CONST ynrcYes        = 1
  74. CONST ynrcErr1       = 2
  75. CONST ynrcErr2       = 3
  76. CONST ynrcErr3       = 4
  77. CONST ynrcErr4       = 5
  78. CONST ynrcErr5       = 6
  79. CONST ynrcErr6       = 7
  80. CONST ynrcErr7       = 8
  81. CONST ynrcErr8       = 9
  82. CONST ynrcErr9       = 10
  83.  
  84.  
  85. ''General Return Codes
  86.  
  87. CONST grcOkay       = 0
  88. CONST grcNotOkay    = 1
  89. CONST grcUserQuit   = 48
  90.  
  91.  
  92. ''Ranges
  93.  
  94. ''CONST cbSymValMax = 8192
  95. CONST cbSymValMax = 512
  96.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  97.     '' but we get Out of String Space wattdrvr error if we alloc
  98.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  99.     '' We should look into using dynamic far alloc instead of
  100.     '' STRING$ for large buffers.
  101.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  102.  
  103.  
  104. ''ON ERROR Error Codes
  105. CONST STFERR      = 1024   ''setup system error
  106. CONST STFQUIT     = 1025   ''user quit
  107.  
  108. CONST scmOff      = 0
  109. CONST scmOnIgnore = 1
  110. CONST scmOnFatal  = 2
  111.  
  112.  
  113. '**************************************************************************
  114. '********************************  Setup API's  ***************************
  115. '**************************************************************************
  116.  
  117. '' common
  118.  
  119. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  120. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  121. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  122. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  124. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  125. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  126. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  127. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  128. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  129. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  130.  
  131.  
  132. ''shell
  133.  
  134. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  135. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  136. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  137. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  138. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  139. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  140. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  141. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  142. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  143. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  144. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  145. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  152. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  153. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  154.  
  155.  
  156.  
  157. ''install
  158.  
  159. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  160. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  163. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  164. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  165. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  166. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  174. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  175. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  176. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  177. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  178. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  179. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  180. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  182. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  183. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  184. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  185. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  186. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  187. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  188. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  189. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  190. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  191. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  192. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  193. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  194. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  195. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  196.  
  197. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  198.  
  199.  
  200.  
  201. '*************************************************************************
  202. '****************  Setup Basic Wrapper Declarations  *********************
  203. '*************************************************************************
  204.  
  205.  
  206. ''shell
  207.  
  208. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  209. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  210. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  211. DECLARE SUB UIPop (n%)
  212. DECLARE SUB UIPopAll
  213. DECLARE SUB SetTitle (sz$)
  214. DECLARE SUB ReadInfFile (szFile$)
  215. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  216. DECLARE SUB RemoveSymbol (szSym$)
  217. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  218. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  219. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  220. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  221. DECLARE SUB AddListItem(szSymbol$, szItem$)
  222. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  223.  
  224. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  225. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  226.  
  227. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  228. DECLARE SUB RestoreCursor (hPrev%)
  229.  
  230. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  231. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  232.  
  233. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  234. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  235. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  236. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  237.  
  238. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  239. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  240. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  241. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  242.  
  243.  
  244. ''install
  245.  
  246.  
  247. DECLARE SUB CreateDir (szDir$, cmo%)
  248. DECLARE SUB RemoveDir (szDir$, cmo%)
  249. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  250. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  251. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  252. DECLARE SUB CopyFilesInCopyList
  253. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  254. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  255. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  256. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  257. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  258. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  259. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  260. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  261. DECLARE SUB DumpCopyList (szFile$)
  262. DECLARE SUB ClearCopyList
  263. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  264. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  265. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  266. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  267. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  268. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  269. DECLARE SUB InitInstall
  270. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  271. DECLARE SUB AddBlankToBillboardList (lTicks&)
  272. DECLARE SUB ClearBillboardList
  273. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  274. DECLARE SUB CloseLogFile
  275. DECLARE SUB WriteToLogFile (szStr$)
  276. DECLARE SUB SetCopyGaugePosition (x%, y%)
  277. DECLARE SUB SetRestartDir(szDir$)
  278. DECLARE FUNCTION RestartListEmpty AS INTEGER
  279. DECLARE FUNCTION ExitExecRestart AS INTEGER
  280. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  281. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  282. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  283. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  284. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  285.  
  286.  
  287. '' Error Handling
  288.  
  289. '$ifdef DEBUG
  290.  
  291. '' Setup API Errors
  292. CONST saeFail   = 0
  293. CONST saeInit   = 1
  294. CONST saeNYI    = 3
  295. CONST saeArg    = 4    ''must be max sae value
  296.  
  297. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  298. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  299.  
  300. '' chk arg
  301. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  302. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  303. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  304. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  305.  
  306. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  307. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  308.  
  309. '$endif ''DEBUG
  310.  
  311.  
  312.  
  313. '' Windows system detect
  314.  
  315. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  316. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  317. DECLARE FUNCTION GetWindowsMode AS INTEGER
  318. DECLARE FUNCTION GetWindowsDir  AS STRING
  319. DECLARE FUNCTION GetWindowsSysDir AS STRING
  320. DECLARE FUNCTION IsWindowsShared AS INTEGER
  321. DECLARE FUNCTION GetScreenWidth AS INTEGER
  322. DECLARE FUNCTION GetScreenHeight AS INTEGER
  323.  
  324. '' Dave's additions
  325. ''DECLARE FUNCTION FNewWindow LIB "mscuistf.dll" (hInst%, hWnd%) AS INTEGER
  326. DECLARE FUNCTION FPaint LIB "mscuistf.dll" (hInst%, hWnd%) AS INTEGER
  327. DECLARE FUNCTION FGetWnd LIB "mscuistf.dll" AS INTEGER
  328. ''DECLARE SUB NewWind (szDll$)
  329. DECLARE SUB Background (szDll$)
  330.  
  331. '*************************************************************************
  332. '*****************  Setup Basic Wrapper Definitions  *********************
  333. '*************************************************************************
  334. SUB Background(szDll$) STATIC
  335.     i%=HinstFrame()
  336.     j%=HwndFrame()
  337.     IF FPaint(i%, j%)=0 THEN
  338.         i%=1
  339.         ERROR STFERR
  340.     END IF
  341. END SUB
  342.  
  343. ''SUB NewWind(szDll$) STATIC
  344. ''    i%=HinstFrame()
  345. ''    j%=HwndFrame()
  346. ''    IF FNewWindow(i%, j%)=0 THEN
  347. ''        i%=1
  348. ''        ERROR STFERR
  349. ''    END IF
  350. ''END SUB
  351.  
  352.  
  353. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  354.     fFrameInit = 0
  355.     fInstallInit = 0
  356.  
  357.     IF hSetup > 0 THEN
  358. '$ifdef DEBUG
  359.         StfApiErr saeInit, "InitSetup", szCmdLine$
  360. '$endif ''DEBUG
  361.     END IF
  362.  
  363.     i% = InitFrame(szCmdLine$)
  364.     fFrameInit = 1
  365.  
  366.     InitInstall
  367.     fInstallInit = 1
  368.  
  369.     InitSetup = i%
  370. END FUNCTION
  371.  
  372.  
  373.  
  374. '**************************************************************************
  375. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  376.     IF hSetup > 0 THEN
  377. '$ifdef DEBUG
  378.         StfApiErr saeInit, "InitFrame", szCmdLine$
  379. '$endif ''DEBUG
  380.     ELSE
  381.         i% = InitializeFrame(szCmdLine$)
  382.         IF i% = -1 THEN
  383.             END   '' NOT an error - Usage (/?) or Command line copy operation
  384.         ELSEIF i% = 0 THEN
  385. '$ifdef DEBUG
  386.             StfApiErr saeFail, "InitFrame", szCmdLine$
  387. '$endif ''DEBUG
  388.             END
  389.         ELSE
  390.             InitFrame = i%
  391.         END IF
  392.     END IF
  393. END FUNCTION
  394.  
  395.  
  396. '**************************************************************************
  397. SUB SetBitmap(szDll$, Bitmap%) STATIC
  398.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  399. '$ifdef DEBUG
  400.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  401. '$endif ''DEBUG
  402.         ERROR STFERR
  403.     END IF
  404. END SUB
  405.  
  406.  
  407. '**************************************************************************
  408. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  409.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  410. '$ifdef DEBUG
  411.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  412. '$endif ''DEBUG
  413.         ERROR STFERR
  414.     END IF
  415. END SUB
  416.  
  417.  
  418. '*************************************************************************
  419. SUB SetTitle(sz$) STATIC
  420.     SetWindowText HwndFrame(), sz$
  421. END SUB
  422.  
  423.  
  424. '*************************************************************************
  425. SUB ReadInfFile (szFile$) STATIC
  426. '$ifdef DEBUG
  427.     if FValidFATPath(szFile$) = 0 then
  428.         BadArgErr 1, "ReadInfFile", szFile$
  429.     end if
  430.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  431.         StfApiErr saeFail, "ReadInfFile", szFile$
  432. '$else  ''!DEBUG
  433.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  434. '$endif ''!DEBUG
  435.         ERROR STFERR
  436.     END IF
  437. END SUB
  438.  
  439.  
  440. '*************************************************************************
  441. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  442. '$ifdef DEBUG
  443.     if szDll$ = "" then
  444.         n% = 1
  445.     elseif szDlgProc$ = "" then
  446.         n% = 3
  447.     else
  448.         n% = 0
  449.     end if
  450.     if n% > 0 then
  451.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  452.     end if
  453. '$endif ''DEBUG
  454.  
  455.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  456. '$ifdef DEBUG
  457.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  458. '$endif ''DEBUG
  459.         ERROR STFERR
  460.     ELSE
  461.         UIStartDlg = GetSymbolValue("DLGEVENT")
  462.     END IF
  463. END FUNCTION
  464.  
  465.  
  466. '*************************************************************************
  467. SUB UIPop (n%) STATIC
  468.     IF FKillNDialogs(n%) = 0 THEN
  469. '$ifdef DEBUG
  470.         StfApiErr saeFail, "UIPop", STR$(n%)
  471. '$endif ''DEBUG
  472.         ERROR STFERR
  473.     END IF
  474. END SUB
  475.  
  476.  
  477. '*************************************************************************
  478. SUB UIPopAll STATIC
  479.     IF FKillNDialogs(65535) = 0 THEN
  480. '$ifdef DEBUG
  481.         StfApiErr saeFail, "UIPopAll", ""
  482. '$endif ''DEBUG
  483.         ERROR STFERR
  484.     END IF
  485. END SUB
  486.  
  487.  
  488. '*************************************************************************
  489. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  490. '$ifdef DEBUG
  491.     if szSymbol$ = "" then
  492.         BadArgErr 1, "GetSymbolValue", szSymbol$
  493.     end if
  494. '$endif ''DEBUG
  495.     szValue$ = string$(cbSymValMax,32)
  496.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  497.     GetSymbolValue = szValue$
  498.     IF Length% >= cbSymValMax THEN
  499.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  500.         ERROR STFERR
  501.     END IF
  502.     IF szSymbol$ = "" THEN
  503.         ERROR STFERR
  504.     END IF
  505.     szValue$ = ""
  506. END FUNCTION
  507.  
  508.  
  509. '*************************************************************************
  510. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  511. '$ifdef DEBUG
  512.     if szSymbol$ = "" then
  513.         BadArgErr 1, "GetListLength", szSymbol$
  514.     end if
  515. '$endif ''DEBUG
  516.     GetListLength = UsGetListLength(szSymbol$)
  517.     IF szSymbol$ = "" THEN
  518.         ERROR STFERR
  519.     END IF
  520. END FUNCTION
  521.  
  522.  
  523. '*************************************************************************
  524. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  525. '$ifdef DEBUG
  526.     if szListSymbol$ = "" then
  527.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  528.     end if
  529.  
  530.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  531.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  532.     end if
  533. '$endif ''DEBUG
  534.  
  535.     szListItem$ = string$(cbSymValMax,32)
  536.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  537.     GetListItem = szListItem$
  538.     IF Length% >= cbSymValMax THEN
  539.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  540.         ERROR STFERR
  541.     END IF
  542.     IF szListSymbol$ = "" THEN
  543.         ERROR STFERR
  544.     END IF
  545.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  546.         ERROR STFERR
  547.     end if
  548.     szListItem$ = ""
  549. END FUNCTION
  550.  
  551.  
  552. '*************************************************************************
  553. SUB AddListItem(szSymbol$, szItem$) STATIC
  554. '$ifdef DEBUG
  555.     if szSymbol$ = "" then
  556.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  557.     end if
  558. '$endif ''DEBUG
  559.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  560. '$ifdef DEBUG
  561.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  562. '$endif ''DEBUG
  563.         ERROR STFERR
  564.     END IF
  565. END SUB
  566.  
  567.  
  568. '*************************************************************************
  569. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  570. '$ifdef DEBUG
  571.     if szSymbol$ = "" then
  572.         nArg% = 1
  573.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  574.         nArg% = 2
  575.     else
  576.         nArg% = 0
  577.     end if
  578.     if nArg% > 0 then
  579.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  580.     end if
  581. '$endif ''DEBUG
  582.  
  583.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  584. '$ifdef DEBUG
  585.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  586. '$endif ''DEBUG
  587.         ERROR STFERR
  588.     END IF
  589. END SUB
  590.  
  591.  
  592. '**************************************************************************
  593. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  594. '$ifdef DEBUG
  595.     if szSymbol$ = "" then
  596.         n% = 1
  597.     elseif FValidInfSect(szSect$) = 0 then
  598.         n% = 2
  599.     else
  600.         n% = 0
  601.     end if
  602.     if n% > 0 then
  603.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  604.     end if
  605. '$endif ''DEBUG
  606.  
  607.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  608. '$ifdef DEBUG
  609.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  610. '$endif ''DEBUG
  611.         ERROR STFERR
  612.     END IF
  613. END SUB
  614.  
  615.  
  616. '*************************************************************************
  617. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  618. '$ifdef DEBUG
  619.     if szSymbol$ = "" then
  620.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  621.     end if
  622. '$endif ''DEBUG
  623.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  624. '$ifdef DEBUG
  625.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  626. '$endif ''DEBUG
  627.         ERROR STFERR
  628.     END IF
  629. END SUB
  630.  
  631.  
  632. '*************************************************************************
  633. SUB RemoveSymbol(szSym$) STATIC
  634. '$ifdef DEBUG
  635.     if szSym$ = "" then
  636.         BadArgErr 1, "RemoveSymbol", szSym$
  637.     end if
  638. '$endif ''DEBUG
  639.     IF FRemoveSymbol(szSym$) = 0 THEN
  640. '$ifdef DEBUG
  641.         StfApiErr saeFail, "RemoveSymbol", szSym$
  642. '$endif ''DEBUG
  643.         ERROR STFERR
  644.     END IF
  645. END SUB
  646.  
  647.  
  648. '*************************************************************************
  649. FUNCTION ShowWaitCursor STATIC AS INTEGER
  650.     ShowWaitCursor = HShowWaitCursor
  651. END FUNCTION
  652.  
  653.  
  654. '*************************************************************************
  655. SUB RestoreCursor (hPrev%) STATIC
  656.     i% = FRestoreCursor(hPrev%)
  657.     IF i% = 0 THEN
  658. '$ifdef DEBUG
  659.         StfApiErr saeFail, "RestoreCursor", ""
  660. '$endif ''DEBUG
  661.         ERROR STFERR
  662.     END IF
  663. END SUB
  664.  
  665.  
  666. '*************************************************************************
  667. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  668.     SetBeepingMode = FSetBeepingMode(mode%)
  669. END FUNCTION
  670.  
  671.  
  672. '*************************************************************************
  673. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  674.     SetSilentMode = FSetSilent(mode%)
  675. END FUNCTION
  676.  
  677.  
  678. '*************************************************************************
  679. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  680. '$ifdef DEBUG
  681.     if FValidInfSect(szSect$) = 0 then
  682.         n% = 1
  683.     elseif szKey$ = "" then
  684.         n% = 2
  685.     else
  686.         n% = 0
  687.     end if
  688.     if n% > 0 then
  689.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  690.     end if
  691. '$endif ''DEBUG
  692.  
  693.     szBuf$ = string$(128, 32)
  694.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  695.     IF Length% >= 128 THEN
  696.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  697.         ERROR STFERR
  698.     END IF
  699.  
  700.     IF Length% = -1 THEN
  701. '$ifdef DEBUG
  702.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  703. '$endif ''DEBUG
  704.         ERROR STFERR
  705.     END IF
  706.  
  707.     GetSectionKeyDate = szBuf$
  708.     szBuf$ = ""
  709. END FUNCTION
  710.  
  711.  
  712. '*************************************************************************
  713. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  714. '$ifdef DEBUG
  715.     if FValidInfSect(szSect$) = 0 then
  716.         n% = 1
  717.     elseif szKey$ = "" then
  718.         n% = 2
  719.     else
  720.         n% = 0
  721.     end if
  722.     if n% > 0 then
  723.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  724.     end if
  725. '$endif ''DEBUG
  726.  
  727.     szBuf$ = string$(128, 32)
  728.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  729.     IF Length% >= 128 THEN
  730.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  731.         ERROR STFERR
  732.     END IF
  733.  
  734.     IF Length% = -1 THEN
  735. '$ifdef DEBUG
  736.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  737. '$endif ''DEBUG
  738.         ERROR STFERR
  739.     END IF
  740.  
  741.     GetSectionKeyFilename = szBuf$
  742.     szBuf$ = ""
  743. END FUNCTION
  744.  
  745.  
  746. '*************************************************************************
  747. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  748. '$ifdef DEBUG
  749.     if FValidInfSect(szSect$) = 0 then
  750.         n% = 1
  751.     elseif szKey$ = "" then
  752.         n% = 2
  753.     else
  754.         n% = 0
  755.     end if
  756.     if n% > 0 then
  757.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  758.     end if
  759. '$endif ''DEBUG
  760.  
  761.     szBuf$ = string$(128, 32)
  762.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  763.     IF Length% >= 128 THEN
  764.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  765.         ERROR STFERR
  766.     END IF
  767.  
  768.     IF Length% = -1 THEN
  769. '$ifdef DEBUG
  770.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  771. '$endif ''DEBUG
  772.         ERROR STFERR
  773.     END IF
  774.  
  775.     GetSectionKeySize = VAL(szBuf$)
  776.     szBuf$ = ""
  777. END FUNCTION
  778.  
  779.  
  780. '*************************************************************************
  781. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  782. '$ifdef DEBUG
  783.     if FValidInfSect(szSect$) = 0 then
  784.         n% = 1
  785.     elseif szKey$ = "" then
  786.         n% = 2
  787.     else
  788.         n% = 0
  789.     end if
  790.     if n% > 0 then
  791.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  792.     end if
  793. '$endif ''DEBUG
  794.  
  795.     szBuf$ = string$(128, 32)
  796.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  797.     IF Length% >= 128 THEN
  798.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  799.         ERROR STFERR
  800.     END IF
  801.  
  802.     IF Length% = -1 THEN
  803. '$ifdef DEBUG
  804.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  805. '$endif ''DEBUG
  806.         ERROR STFERR
  807.     END IF
  808.  
  809.     GetSectionKeyVersion = szBuf$
  810.     szBuf$ = ""
  811. END FUNCTION
  812.  
  813.  
  814. '*************************************************************************
  815. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  816. '$ifdef DEBUG
  817.     if szSym$ = "" then
  818.         n% = 1
  819.     elseif FValidInfSect(szSect$) = 0 then
  820.         n% = 2
  821.     else
  822.         n% = 0
  823.     end if
  824.     if n% > 0 then
  825.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  826.     end if
  827. '$endif ''DEBUG
  828.  
  829.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  830. '$ifdef DEBUG
  831.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  832. '$endif ''DEBUG
  833.         ERROR STFERR
  834.     END IF
  835. END SUB
  836.  
  837.  
  838. '*************************************************************************
  839. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  840. '$ifdef DEBUG
  841.     if szSym$ = "" then
  842.         n% = 1
  843.     elseif FValidInfSect(szSect$) = 0 then
  844.         n% = 2
  845.     else
  846.         n% = 0
  847.     end if
  848.     if n% > 0 then
  849.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  850.     end if
  851. '$endif ''DEBUG
  852.  
  853.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  854. '$ifdef DEBUG
  855.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  856. '$endif ''DEBUG
  857.         ERROR STFERR
  858.     END IF
  859. END SUB
  860.  
  861.  
  862. '*************************************************************************
  863. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  864. '$ifdef DEBUG
  865.     if szSym$ = "" then
  866.         n% = 1
  867.     elseif FValidInfSect(szSect$) = 0 then
  868.         n% = 2
  869.     else
  870.         n% = 0
  871.     end if
  872.     if n% > 0 then
  873.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  874.     end if
  875. '$endif ''DEBUG
  876.  
  877.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  878. '$ifdef DEBUG
  879.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  880. '$endif ''DEBUG
  881.         ERROR STFERR
  882.     END IF
  883. END SUB
  884.  
  885.  
  886. '*************************************************************************
  887. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  888. '$ifdef DEBUG
  889.     if szSym$ = "" then
  890.         n% = 1
  891.     elseif FValidInfSect(szSect$) = 0 then
  892.         n% = 2
  893.     else
  894.         n% = 0
  895.     end if
  896.     if n% > 0 then
  897.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  898.     end if
  899. '$endif ''DEBUG
  900.  
  901.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  902. '$ifdef DEBUG
  903.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  904. '$endif ''DEBUG
  905.         ERROR STFERR
  906.     END IF
  907. END SUB
  908.  
  909.  
  910. '*************************************************************************
  911. SUB InitInstall STATIC
  912.     IF hSetup > 0 THEN
  913. '$ifdef DEBUG
  914.         StfApiErr saeInit, "InitInstall", ""
  915. '$endif ''DEBUG
  916.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  917. '$ifdef DEBUG
  918.         StfApiErr saeFail, "InitInstall", ""
  919. '$endif ''DEBUG
  920.         END
  921.     END IF
  922. END SUB
  923.  
  924.  
  925. '*************************************************************************
  926. SUB CreateDir (szDir$, cmo%) STATIC
  927. '$ifdef DEBUG
  928.     if FValidFATDir(szDir$) = 0 then
  929.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  930.     end if
  931. '$endif ''DEBUG
  932.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  933. '$ifdef DEBUG
  934.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  935. '$endif ''DEBUG
  936.         ERROR STFERR
  937.     END IF
  938. END SUB
  939.  
  940.  
  941. '*************************************************************************
  942. SUB RemoveDir (szDir$, cmo%) STATIC
  943. '$ifdef DEBUG
  944.     if FValidFATDir(szDir$) = 0 then
  945.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  946.     end if
  947. '$endif ''DEBUG
  948.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  949. '$ifdef DEBUG
  950.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  951. '$endif ''DEBUG
  952.         ERROR STFERR
  953.     END IF
  954. END SUB
  955.  
  956.  
  957.  
  958. '*************************************************************************
  959. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  960. '$ifdef DEBUG
  961.     if FValidIniFile(szFile$) = 0 then
  962.         n% = 1
  963.     elseif FValidInfSect(szSect$) = 0 then
  964.         n% = 2
  965.     else
  966.         n% = 0
  967.     end if
  968.     if n% > 0 then
  969.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  970.     end if
  971. '$endif ''DEBUG
  972.  
  973.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  974. '$ifdef DEBUG
  975.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  976. '$endif ''DEBUG
  977.         ERROR STFERR
  978.     END IF
  979. END SUB
  980.  
  981.  
  982. '*************************************************************************
  983. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  984. '$ifdef DEBUG
  985.     if FValidIniFile(szFile$) = 0 then
  986.         n% = 1
  987.     elseif FValidInfSect(szSect$) = 0 then
  988.         n% = 2
  989.     else
  990.         n% = 0
  991.     end if
  992.     if n% > 0 then
  993.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  994.     end if
  995. '$endif ''DEBUG
  996.  
  997.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  998. '$ifdef DEBUG
  999.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1000. '$endif ''DEBUG
  1001.         ERROR STFERR
  1002.     END IF
  1003. END SUB
  1004.  
  1005.  
  1006. '*************************************************************************
  1007. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  1008. '$ifdef DEBUG
  1009.     if FValidIniFile(szFile$) = 0 then
  1010.         n% = 1
  1011.     elseif FValidInfSect(szSect$) = 0 then
  1012.         n% = 2
  1013.     elseif szKey$ = "" then
  1014.         n% = 3
  1015.     else
  1016.         n% = 0
  1017.     end if
  1018.     if n% > 0 then
  1019.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1020.     end if
  1021. '$endif ''DEBUG
  1022.  
  1023.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1024. '$ifdef DEBUG
  1025.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1026. '$endif ''DEBUG
  1027.         ERROR STFERR
  1028.     END IF
  1029. END SUB
  1030.  
  1031.  
  1032. '*************************************************************************
  1033. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1034. '$ifdef DEBUG
  1035.     if FValidFATPath(szFile$) = 0 then
  1036.         n% = 1
  1037.     elseif FValidInfSect(szSect$) = 0 then
  1038.         n% = 2
  1039.     elseif szKey$ = "" then
  1040.         n% = 3
  1041.     else
  1042.         n% = 0
  1043.     end if
  1044.     if n% > 0 then
  1045.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1046.     end if
  1047. '$endif ''DEBUG
  1048.  
  1049.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1050. '$ifdef DEBUG
  1051.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1052. '$endif ''DEBUG
  1053.         ERROR STFERR
  1054.     END IF
  1055. END SUB
  1056.  
  1057.  
  1058. '*************************************************************************
  1059. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1060. '$ifdef DEBUG
  1061.     if szGroup$ = "" or len(szGroup$) > 30 then
  1062.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1063.     end if
  1064. '$endif ''DEBUG
  1065.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1066. '$ifdef DEBUG
  1067.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1068. '$endif ''DEBUG
  1069.         ERROR STFERR
  1070.     END IF
  1071. END SUB
  1072.  
  1073.  
  1074. '*************************************************************************
  1075. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1076. '$ifdef DEBUG
  1077.     if szGroup$ = "" or len(szGroup$) > 30 then
  1078.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1079.     end if
  1080. '$endif ''DEBUG
  1081.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1082. '$ifdef DEBUG
  1083.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1084. '$endif ''DEBUG
  1085.         ERROR STFERR
  1086.     END IF
  1087. END SUB
  1088.  
  1089.  
  1090. '*************************************************************************
  1091. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1092. '$ifdef DEBUG
  1093.     if FValidInfSect(szSect$) = 0 then
  1094.         n% = 1
  1095.     elseif szKey$ = "" then
  1096.         n% = 2
  1097.     elseif FValidFATDir(szDst$) = 0 then
  1098.         n% = 3
  1099.     else
  1100.         n% = 0
  1101.     end if
  1102.     if n% > 0 then
  1103.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1104.     end if
  1105. '$endif ''DEBUG
  1106.  
  1107.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1108. '$ifdef DEBUG
  1109.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1110. '$endif ''DEBUG
  1111.         ERROR STFERR
  1112.     END IF
  1113. END SUB
  1114.  
  1115.  
  1116. '*************************************************************************
  1117. SUB DumpCopyList (szFile$) STATIC
  1118. '$ifdef DEBUG
  1119.     if szFile$ = "" then
  1120.         BadArgErr 1, "DumpCopyList", szFile$
  1121.     end if
  1122. '$endif ''DEBUG
  1123.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1124. '$ifdef DEBUG
  1125.         StfApiErr saeFail, "DumpCopyList", szFile$
  1126. '$endif ''DEBUG
  1127.         ERROR STFERR
  1128.     END IF
  1129. END SUB
  1130.  
  1131.  
  1132. '*************************************************************************
  1133. SUB ClearCopyList STATIC
  1134.     ResetCopyList
  1135. END SUB
  1136.  
  1137.  
  1138. '*************************************************************************
  1139. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1140.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1141.     IF lNeed& < 0 THEN
  1142. '$ifdef DEBUG
  1143.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1144. '$endif ''DEBUG
  1145.         ERROR STFERR
  1146.     END IF
  1147.     GetCopyListCost = lNeed&
  1148. END FUNCTION
  1149.  
  1150.  
  1151. '*************************************************************************
  1152. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1153.     szItemNew$ = szItem$
  1154.     IF szOther$ <> "" THEN
  1155.         szItemNew$ = szItem$ + "," + szOther$
  1156.     END IF
  1157. '$ifdef DEBUG
  1158.     if szGroup$ = "" or len(szGroup$) > 30 then
  1159.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1160.     end if
  1161. '$endif ''DEBUG
  1162.  
  1163.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1164. '$ifdef DEBUG
  1165.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1166. '$endif ''DEBUG
  1167.         ERROR STFERR
  1168.     END IF
  1169.     szItemNew$ = ""
  1170. END SUB
  1171.  
  1172.  
  1173. '*************************************************************************
  1174. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1175. '$ifdef DEBUG
  1176.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1177.         n% = 1
  1178.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1179.         n% = 1
  1180.     elseif szProgHelp$ = "" then
  1181.         n% = 2
  1182.     else
  1183.         n% = 0
  1184.     end if
  1185.     if n% > 0 then
  1186.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1187.     end if
  1188. '$endif ''DEBUG
  1189.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1190. '$ifdef DEBUG
  1191.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1192. '$endif ''DEBUG
  1193.         ERROR STFERR
  1194.     END IF
  1195. END SUB
  1196.  
  1197.  
  1198. '*************************************************************************
  1199. SUB CopyFilesInCopyList STATIC
  1200.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1201.  
  1202.     IF grc% = grcUserQuit THEN
  1203.         ERROR STFQUIT
  1204.     ELSEIF grc% > 0 THEN
  1205. '$ifdef DEBUG
  1206.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1207. '$endif ''DEBUG
  1208.         ERROR STFERR
  1209.     END IF
  1210. END SUB
  1211.  
  1212.  
  1213. '*************************************************************************
  1214. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1215. '$ifdef DEBUG
  1216.     if FValidFATPath(szFullPathSrc$) = 0 then
  1217.         n% = 1
  1218.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1219.         n% = 2
  1220.     else
  1221.         n% = 0
  1222.     end if
  1223.     if n% > 0 then
  1224.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1225.     end if
  1226. '$endif ''DEBUG
  1227.  
  1228.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1229. '$ifdef DEBUG
  1230.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1231. '$endif ''DEBUG
  1232.         ERROR STFERR
  1233.     END IF
  1234. END SUB
  1235.  
  1236.  
  1237.  
  1238. '*************************************************************************
  1239. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1240. '$ifdef DEBUG
  1241.     if FValidFATPath(szFullPathSrc$) = 0 then
  1242.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1243.     end if
  1244. '$endif ''DEBUG
  1245.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1246. '$ifdef DEBUG
  1247.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1248. '$endif ''DEBUG
  1249.         ERROR STFERR
  1250.     END IF
  1251. END SUB
  1252.  
  1253.  
  1254. '*************************************************************************
  1255. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1256. '$ifdef DEBUG
  1257.     if FValidFATPath(szFullPath$) = 0 then
  1258.         n% = 1
  1259.     elseif szBackup$ = "" then
  1260.         n% = 2
  1261.     else
  1262.         n% = 0
  1263.     end if
  1264.     if n% > 0 then
  1265.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1266.     end if
  1267. '$endif ''DEBUG
  1268.  
  1269.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1270. '$ifdef DEBUG
  1271.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1272. '$endif ''DEBUG
  1273.         ERROR STFERR
  1274.     END IF
  1275. END SUB
  1276.  
  1277.  
  1278. '*************************************************************************
  1279. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1280. '$ifdef DEBUG
  1281.     if FValidFATPath(szFullPath$) = 0 then
  1282.         n% = 1
  1283.     elseif szBackup$ = "" then
  1284.         n% = 2
  1285.     else
  1286.         n% = 0
  1287.     end if
  1288.     if n% > 0 then
  1289.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1290.     end if
  1291. '$endif ''DEBUG
  1292.  
  1293.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1294. '$ifdef DEBUG
  1295.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1296. '$endif ''DEBUG
  1297.         ERROR STFERR
  1298.     END IF
  1299. END SUB
  1300.  
  1301.  
  1302. '*************************************************************************
  1303. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1304. '$ifdef DEBUG
  1305.     if FValidInfSect(szSect$) = 0 then
  1306.         n% = 1
  1307.     elseif FValidFATDir(szSrc$) = 0 then
  1308.         n% = 2
  1309.     elseif FValidFATDir(szDest$) = 0 then
  1310.         n% = 3
  1311.     else
  1312.         n% = 0
  1313.     end if
  1314.     if n% > 0 then
  1315.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1316.     end if
  1317. '$endif ''DEBUG
  1318.  
  1319.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1320. '$ifdef DEBUG
  1321.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1322. '$endif ''DEBUG
  1323.         ERROR STFERR
  1324.     END IF
  1325. END SUB
  1326.  
  1327.  
  1328. '*************************************************************************
  1329. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1330. '$ifdef DEBUG
  1331.     if FValidInfSect(szSect$) = 0 then
  1332.         n% = 1
  1333.     elseif szKey$ = "" then
  1334.         n% = 2
  1335.     elseif FValidFATDir(szSrc$) = 0 then
  1336.         n% = 3
  1337.     elseif FValidFATDir(szDest$) = 0 then
  1338.         n% = 4
  1339.     else
  1340.         n% = 0
  1341.     end if
  1342.     if n% > 0 then
  1343.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1344.     end if
  1345. '$endif ''DEBUG
  1346.  
  1347.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1348. '$ifdef DEBUG
  1349.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1350. '$endif ''DEBUG
  1351.         ERROR STFERR
  1352.     END IF
  1353. END SUB
  1354.  
  1355.  
  1356. '*************************************************************************
  1357. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1358. '$ifdef DEBUG
  1359.     if FValidInfSect(szSect$) = 0 then
  1360.         n% = 1
  1361.     elseif szKey$ = "" then
  1362.         n% = 2
  1363.     elseif FValidFATDir(szSrc$) = 0 then
  1364.         n% = 3
  1365.     elseif FValidFATPath(szDest$) = 0 then
  1366.         n% = 4
  1367.     else
  1368.         n% = 0
  1369.     end if
  1370.     if n% > 0 then
  1371.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1372.     end if
  1373. '$endif ''DEBUG
  1374.  
  1375.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1376. '$ifdef DEBUG
  1377.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1378. '$endif ''DEBUG
  1379.         ERROR STFERR
  1380.     END IF
  1381. END SUB
  1382.  
  1383.  
  1384. '*************************************************************************
  1385. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1386. '$ifdef DEBUG
  1387.     if szDll$ = "" then
  1388.         n% = 1
  1389.     elseif idDlg% = 0 then
  1390.         n% = 2
  1391.     elseif szProc$ = "" then
  1392.         n% = 3
  1393.     elseif lTicks& <= 0 then
  1394.         n% = 4
  1395.     else
  1396.         n% = 0
  1397.     end if
  1398.     if n% > 0 then
  1399.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1400.     end if
  1401. '$endif ''DEBUG
  1402.  
  1403.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1404. '$ifdef DEBUG
  1405.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1406. '$endif ''DEBUG
  1407.         ERROR STFERR
  1408.     END IF
  1409. END SUB
  1410.  
  1411.  
  1412. '*************************************************************************
  1413. SUB AddBlankToBillboardList (lTicks&) STATIC
  1414. '$ifdef DEBUG
  1415.     if lTicks& <= 0 then
  1416.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1417.     end if
  1418. '$endif ''DEBUG
  1419.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1420. '$ifdef DEBUG
  1421.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1422. '$endif ''DEBUG
  1423.         ERROR STFERR
  1424.     END IF
  1425. END SUB
  1426.  
  1427.  
  1428. '*************************************************************************
  1429. SUB ClearBillboardList STATIC
  1430.     IF FClearBillboardList = 0 THEN
  1431. '$ifdef DEBUG
  1432.         StfApiErr saeFail, "ClearBillboardList", ""
  1433. '$endif ''DEBUG
  1434.         ERROR STFERR
  1435.     END IF
  1436. END SUB
  1437.  
  1438.  
  1439. '*************************************************************************
  1440. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1441. '$ifdef DEBUG
  1442.     if FValidFATPath(szFile$) = 0 then
  1443.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1444.     end if
  1445. '$endif ''DEBUG
  1446.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1447. '$ifdef DEBUG
  1448.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1449. '$endif ''DEBUG
  1450.         ERROR STFERR
  1451.     END IF
  1452. END SUB
  1453.  
  1454.  
  1455. '*************************************************************************
  1456. SUB CloseLogFile STATIC
  1457.     IF FCloseLogFile() = 0 THEN
  1458. '$ifdef DEBUG
  1459.         StfApiErr saeFail, "CloseLogFile", ""
  1460. '$endif ''DEBUG
  1461.         ERROR STFERR
  1462.     END IF
  1463. END SUB
  1464.  
  1465.  
  1466. '*************************************************************************
  1467. SUB WriteToLogFile (szStr$) STATIC
  1468.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1469. '$ifdef DEBUG
  1470.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1471. '$endif ''DEBUG
  1472.         ERROR STFERR
  1473.     END IF
  1474. END SUB
  1475.  
  1476.  
  1477. ''' -1 in either parameter will mean 'center in frame client area'
  1478. '*************************************************************************
  1479. SUB SetCopyGaugePosition (x%, y%) STATIC
  1480.     ProSetPos x%, y%
  1481. END SUB
  1482.  
  1483.  
  1484. '*************************************************************************
  1485. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1486.     szBuf$ = STRING$(512, 32)
  1487.  
  1488.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1489.     IF wRet% = 0 THEN
  1490.         FindFileUsingFileOpen = szBuf$
  1491.     ELSEIF wRet% = 1 THEN
  1492.         FindFileUsingFileOpen = ""
  1493.     ELSE
  1494. '$ifdef DEBUG
  1495.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1496. '$endif ''DEBUG
  1497.         ERROR STFERR
  1498.     END IF
  1499.  
  1500.     szBuf$ = ""
  1501. END FUNCTION
  1502.  
  1503.  
  1504. '*************************************************************************
  1505. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1506.     IsDirWritable = FIsDirWritable(szDir$)
  1507. END FUNCTION
  1508.  
  1509.  
  1510. '*************************************************************************
  1511. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1512. '$ifdef DEBUG
  1513.     if FValidFATDir(szFile$) = 0 then
  1514.         BadArgErr 1, "IsFileWritable", szFile$
  1515.     end if
  1516. '$endif ''DEBUG
  1517.     IsFileWritable = FIsFileWritable(szFile$)
  1518. END FUNCTION
  1519.  
  1520.  
  1521. '*************************************************************************
  1522. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1523.     IF iField% < 1 THEN
  1524. '$ifdef DEBUG
  1525.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1526. '$endif ''DEBUG
  1527.         ERROR STFERR
  1528.     END IF
  1529.     szStart$ = szLine$
  1530.     IF iField% <> 1 THEN
  1531.         FOR i% = 2 TO iField% STEP 1
  1532.             iNew% = INSTR(szStart$, ",")
  1533.             IF iNew% = 0 THEN
  1534.                 GetNthFieldFromIniString = ""
  1535.                 GOTO _GNFFIS_END
  1536.             END IF
  1537.             szStart$ = MID$(szStart$, (iNew% + 1))
  1538.         NEXT
  1539.     END IF
  1540.  
  1541.     iNew% = INSTR(szStart$, ",")
  1542.     IF iNew% <> 0 THEN
  1543.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1544.     END IF
  1545.  
  1546.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1547.  
  1548. _GNFFIS_END:
  1549.  
  1550. END FUNCTION
  1551.  
  1552.  
  1553. '*************************************************************************
  1554. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1555.     GetWindowsMajorVersion = GetVersion() MOD 256
  1556. END FUNCTION
  1557.  
  1558.  
  1559. '*************************************************************************
  1560. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1561.     GetWindowsMinorVersion = GetVersion() / 256
  1562. END FUNCTION
  1563.  
  1564.  
  1565. '*************************************************************************
  1566. FUNCTION GetWindowsMode STATIC AS INTEGER
  1567.     GetWindowsMode = 0
  1568.     longTmp& = GetWinFlags()
  1569.     IF longTmp& AND WF_STANDARD THEN
  1570.         GetWindowsMode = 1
  1571.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1572.         GetWindowsMode = 2
  1573.     END IF
  1574. END FUNCTION
  1575.  
  1576.  
  1577. '*************************************************************************
  1578. FUNCTION GetWindowsDir STATIC AS STRING
  1579.     szBuf$ = string$(256, 32)
  1580.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1581.  
  1582.     IF cbBuf% = 0 THEN
  1583.         GetWindowsDir = ""
  1584. '$ifdef DEBUG
  1585.         StfApiErr saeFail, "GetWindowsDir", ""
  1586. '$endif ''DEBUG
  1587.         ERROR STFERR
  1588.     ELSE
  1589.         IF cbBuf% > 255 THEN
  1590.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1591.             ERROR STFERR
  1592.         END IF
  1593.         szBuf$ = RTRIM$(szBuf$)
  1594.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1595.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1596.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1597.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1598.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1599.         END IF
  1600.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1601.             szBuf$ = szBuf$ + "\"
  1602.         END IF
  1603.         GetWindowsDir = szBuf$
  1604.     END IF
  1605.  
  1606.     szBuf$ = ""
  1607. END FUNCTION
  1608.  
  1609.  
  1610. '*************************************************************************
  1611. FUNCTION GetWindowsSysDir STATIC AS STRING
  1612.     szBuf$ = string$(256, 32)
  1613.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1614.  
  1615.     IF cbBuf% = 0 THEN
  1616. '$ifdef DEBUG
  1617.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1618. '$endif ''DEBUG
  1619.         ERROR STFERR
  1620.     ELSE
  1621.         IF cbBuf% > 255 THEN
  1622.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1623.             ERROR STFERR
  1624.         END IF
  1625.         szBuf$ = RTRIM$(szBuf$)
  1626.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1627.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1628.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1629.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1630.         END IF
  1631.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1632.             szBuf$ = szBuf$ + "\"
  1633.         END IF
  1634.         GetWindowsSysDir = szBuf$
  1635.     END IF
  1636.  
  1637.     szBuf$ = ""
  1638. END FUNCTION
  1639.  
  1640.  
  1641. '*************************************************************************
  1642. FUNCTION IsWindowsShared STATIC AS INTEGER
  1643.     szWin$ = UCASE$(GetWindowsDir())
  1644.     szSys$ = UCASE$(GetWindowsSysDir())
  1645.  
  1646.     IF len(szWin$) = 0 THEN
  1647. '$ifdef DEBUG
  1648.         StfApiErr saeFail, "IsWindowsShared", ""
  1649. '$endif ''DEBUG
  1650.         ERROR STFERR
  1651.     END IF
  1652.  
  1653.     IF len(szSys$) <= len(szWin$) THEN
  1654.         IsWindowsShared = 1
  1655.     ELSE
  1656.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1657.         IF szWin$ = szSys$ THEN
  1658.             IsWindowsShared = 0
  1659.         ELSE
  1660.             IsWindowsShared = 1
  1661.         END IF
  1662.     END IF
  1663. END FUNCTION
  1664.  
  1665.  
  1666. '*************************************************************************
  1667. FUNCTION GetScreenWidth STATIC AS INTEGER
  1668.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1669. END FUNCTION
  1670.  
  1671.  
  1672. '*************************************************************************
  1673. FUNCTION GetScreenHeight STATIC AS INTEGER
  1674.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1675. END FUNCTION
  1676.  
  1677.  
  1678. '*************************************************************************
  1679. SUB SetRestartDir (szDir$) STATIC
  1680. '$ifdef DEBUG
  1681.     if FValidFATDir(szDir$) = 0 then
  1682.         BadArgErr 1, "SetRestartDir", szDir$
  1683.     end if
  1684. '$endif ''DEBUG
  1685.     IF FSetRestartDir(szDir$) = 0 THEN
  1686. '$ifdef DEBUG
  1687.         StfApiErr saeFail, "SetRestartDir", szDir$
  1688. '$endif ''DEBUG
  1689.         ERROR STFERR
  1690.     END IF
  1691. END SUB
  1692.  
  1693.  
  1694. '*************************************************************************
  1695. FUNCTION RestartListEmpty STATIC AS INTEGER
  1696.     IF FRestartListEmpty() = 0 THEN
  1697.         RestartListEmpty = 0
  1698.     ELSE
  1699.         RestartListEmpty = 1
  1700.     END IF
  1701. END FUNCTION
  1702.  
  1703.  
  1704. '*************************************************************************
  1705. FUNCTION ExitExecRestart STATIC AS INTEGER
  1706.     ExitExecRestart = FExitExecRestart
  1707. END FUNCTION
  1708.  
  1709.  
  1710. '*************************************************************************
  1711. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1712.  
  1713. '$ifdef DEBUG
  1714.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1715.         n% = 1
  1716.     elseif FValidFATPath(szDst$) = 0 then
  1717.         n% = 2
  1718.     elseif FValidFATDir(szDir$) = 0 then
  1719.         n% = 3
  1720.     else
  1721.         n% = 0
  1722.     end if
  1723.     if n% > 0 then
  1724.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1725.     end if
  1726. '$endif ''DEBUG
  1727.  
  1728.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1729. '$ifdef DEBUG
  1730.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1731. '$endif ''DEBUG
  1732.         ERROR STFERR
  1733.     END IF
  1734. END SUB
  1735.  
  1736.  
  1737.  
  1738. '**************************************************************************
  1739. '***************************  Error Handlers  *****************************
  1740. '**************************************************************************
  1741.  
  1742.  
  1743. '$ifdef DEBUG
  1744. '**************************************************************************
  1745. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1746.     select case nMsg%
  1747.         case saeFail
  1748.             lpText$ = "Failed"
  1749.         case saeInit
  1750.             lpText$ = "Already Initialized"
  1751.         case saeNYI
  1752.             lpText$ = "NYI"
  1753.         case else
  1754.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1755.     end select
  1756.  
  1757.     lpText$ = lpText$ + ": "+ szApi$
  1758.     if szArgs$ <> "" then
  1759.         lpText$ = lpText + " (" + szArgs$ + ")"
  1760.     end if
  1761.     lpCaption$ = "MS-Setup Toolkit API Error"
  1762.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1763.     print lpText$
  1764.     lpText$ = ""
  1765.     lpCaption$ = ""
  1766. END SUB
  1767.  
  1768. '**************************************************************************
  1769. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1770.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1771.     ERROR STFERR
  1772. END SUB
  1773.  
  1774.  
  1775. '** REVIEW: Move this function into common lib (we'll need it there too)
  1776. '**************************************************************************
  1777. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1778.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1779.         FValidInfSect = 0
  1780.     else
  1781.         FValidInfSect = 1
  1782.     end if
  1783. END FUNCTION
  1784.  
  1785.  
  1786. '** REVIEW: Move this function into common lib (we'll need it there too)
  1787. '**************************************************************************
  1788. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1789.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1790.         FValidIniFile = 0
  1791.     else
  1792.         FValidIniFile = 1
  1793.     end if
  1794. END FUNCTION
  1795.  
  1796. '**************************************************************************
  1797. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1798.  
  1799.     if szDrive$ = "" then
  1800.         FValidDrive = 0
  1801.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1802.         FValidDrive = 1
  1803.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1804.         FValidDrive = 0
  1805.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1806.         FValidDrive = 0
  1807.     elseif LEN(szDrive$) = 1 then
  1808.         FValidDrive = 1
  1809.     elseif INSTR(2,szDrive$,":\") = 2 then
  1810.         FValidDrive = 1
  1811.     elseif INSTR(1,szDrive$,":") = 2 then
  1812.         FValidDrive = 1
  1813.     else
  1814.         FValidDrive = 0
  1815.     end if
  1816. END FUNCTION
  1817.  
  1818. '$endif ''DEBUG
  1819.  
  1820.  
  1821. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1822.  
  1823. End Trap
  1824.  
  1825. hSetup = InitSetup(COMMAND$)
  1826.  
  1827. ON ERROR GOTO QUIT
  1828.  
  1829.